// 获取 token（假设保存在 localStorage 中）
function getToken() {
  return localStorage.getItem('authToken'); // 或者其他方式获取 token
}

// 保存数据到 localStorage
function saveRoomDataToLocalStorage(roomId, roomName) {
  const savedData = JSON.parse(localStorage.getItem('roomData')) || []; // 获取已保存的数据
  const newRoom = { roomId, roomName }; // 新的数据
  savedData.push(newRoom); // 添加到数组
  localStorage.setItem('roomData', JSON.stringify(savedData)); // 保存回 localStorage
  console.log('房间数据已保存到 localStorage:', savedData);
  alert('房间数据已保存！');
}

// 从 localStorage 中删除域数据
function deleteRoomDataFromLocalStorage(roomId) {
  const savedData = JSON.parse(localStorage.getItem('roomData')) || []; // 获取已保存的数据
  const updatedData = savedData.filter(room => room.roomId !== roomId); // 过滤掉要删除的域
  localStorage.setItem('roomData', JSON.stringify(updatedData)); // 保存更新后的数据
  console.log('房间数据已从 localStorage 删除:', updatedData);
  alert('房间数据已删除！');
}

// 创建聊天室
async function createRoom(roomName) {
  const token = getToken(); // 获取 token
  const response = await fetch('http://localhost:9090/room/createRoom', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}` // 携带 token
    },
    body: JSON.stringify({ roomName }),
  });

  if (response.ok) {
    const data = await response.json();
    console.log('聊天室创建成功:', data);
    return data.roomId; // 假设返回的数据中包含房间 ID
  } else {
    console.error('聊天室创建失败:', response.status);
    return null;
  }
}

// 加入聊天室
async function joinRoom(roomId) {
  const token = getToken(); // 获取 token
  const response = await fetch(`http://localhost:9090/room/joinRoom?roomId=${roomId}`, {
    method: 'GET',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}` // 携带 token
    },
  });

  if (response.ok) {
    const data = await response.json();
    console.log('加入聊天室成功:', data);
    alert(`加入聊天室成功：${data.message}`);
  } else {
    console.error('加入聊天室失败:', response.status);
    alert('加入聊天室失败');
  }
}

// 搜索已存在的域
async function searchDomain(domainId) {
  const token = getToken(); // 获取 token
  const response = await fetch(`http://localhost:9090/room/joinRoom/${domainId}`, {
    method: 'GET',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}` // 携带 token
    },
  });

  const searchResultDiv = document.getElementById('search-result');
  const joinBtn = document.getElementById('join-btn');

  if (response.ok) {
    const data = await response.json();
    console.log('搜索结果:', data);

    if (data.code === 0) {
      // 显示搜索结果
      searchResultDiv.innerHTML = `找到域：<strong>${data.data.roomName}</strong>（ID: ${domainId}）`;
      joinBtn.style.display = 'inline-block'; // 显示加入按钮
      joinBtn.onclick = () => joinRoom(domainId); // 绑定加入房间的功能
    } else {
      // 显示错误信息
      searchResultDiv.innerHTML = `<span style="color: red;">搜索失败：${data.message}</span>`;
      joinBtn.style.display = 'none'; // 隐藏加入按钮
    }
  } else {
    console.error('搜索域失败:', response.status);
    alert('搜索域失败，请检查网络或稍后重试');
    searchResultDiv.innerHTML = '';
    joinBtn.style.display = 'none'; // 隐藏加入按钮
  }
}

// 生成域并保存数据到 localStorage
async function generateDomain() {
  const token = getToken(); // 获取 token
  const response = await fetch('http://localhost:9090/domain/generate', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}` // 携带 token
    },
  });

  const searchResultDiv = document.getElementById('search-result');
  const joinBtn = document.getElementById('join-btn');

  if (response.ok) {
    const data = await response.json();
    console.log('域生成成功:', data);

    if (data.code === 0) {
      // 显示生成的域信息
      const domainId = data.data.domainId; // 假设后端返回域 ID
      const domainName = data.data.domainName; // 假设后端返回域名称
      searchResultDiv.innerHTML = `生成的新域：<strong>${domainName}</strong>（ID: ${domainId}）`;

      // 保存域信息到 localStorage
      saveRoomDataToLocalStorage(domainId, domainName);

      // 显示加入按钮并绑定功能
      joinBtn.style.display = 'inline-block';
      joinBtn.onclick = () => joinRoom(domainId);
    } else {
      // 显示错误信息
      searchResultDiv.innerHTML = `<span style="color: red;">域生成失败：${data.message}</span>`;
      joinBtn.style.display = 'none';
    }
  } else {
    console.error('生成域失败:', response.status);
    alert('生成域失败，请检查网络或稍后重试');
    searchResultDiv.innerHTML = '';
    joinBtn.style.display = 'none';
  }
}

// 删除域
async function deleteRoom(roomId) {
  const token = getToken(); // 获取 token
  const response = await fetch(`http://localhost:9090/room/logout/${roomId}`, {
    method: 'GET',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}` // 携带 token
    },
  });

  if (response.ok) {
    const data = await response.json();
    console.log('删除域成功:', data);

    if (data.code === 0) {
      // 从 localStorage 中删除域数据
      deleteRoomDataFromLocalStorage(roomId);

      // 更新页面显示
      const searchResultDiv = document.getElementById('search-result');
      searchResultDiv.innerHTML = `<span style="color: green;">域删除成功：${data.message}</span>`;
      document.getElementById('join-btn').style.display = 'none'; // 隐藏加入按钮
    } else {
      alert(`删除域失败：${data.message}`);
    }
  } else {
    console.error('删除域失败:', response.status);
    alert('删除域失败，请检查网络或稍后重试');
  }
}

// 退出域
async function leaveRoom(roomId) {
  const token = getToken(); // 获取 token
  const response = await fetch(`http://localhost:9090/room/logout/${roomId}`, {
    method: 'GET',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}` // 携带 token
    },
  });

  if (response.ok) {
    const data = await response.json();
    console.log('退出域成功:', data);
    alert(`退出域成功：${data.message}`);
  } else {
    console.error('退出域失败:', response.status);
    alert('退出域失败，请检查网络或稍后重试');
  }
}

// 绑定右键菜单事件
let selectedRoomId = null; // 用于存储当前选中的域 ID

// 右键点击域头像时设置选中的域 ID
document.addEventListener('contextmenu', (event) => {
  const target = event.target;
  if (target.classList.contains('domain-avatar')) {
    selectedRoomId = target.getAttribute('data-room-id'); // 假设域头像元素有 data-room-id 属性
    event.preventDefault(); // 阻止默认右键菜单
    const contextMenu = document.getElementById('context-menu');
    contextMenu.style.display = 'block';
    contextMenu.style.left = `${event.pageX}px`;
    contextMenu.style.top = `${event.pageY}px`;
  }
});

// 点击其他地方隐藏右键菜单
document.addEventListener('click', () => {
  const contextMenu = document.getElementById('context-menu');
  contextMenu.style.display = 'none';
});

// 删除域
document.getElementById('delete-domain').addEventListener('click', () => {
  if (selectedRoomId) {
    deleteRoom(selectedRoomId); // 直接删除选中的域
  }
});

// 退出域
document.getElementById('leave-domain').addEventListener('click', () => {
  if (selectedRoomId) {
    leaveRoom(selectedRoomId); // 直接退出选中的域
  }
});

// 绑定生成域按钮事件
document.getElementById('create-btn').addEventListener('click', () => {
  generateDomain(); // 调用生成域功能
});

// 绑定搜索按钮事件
document.getElementById('search-btn').addEventListener('click', () => {
  const domainId = document.getElementById('domain-id').value.trim();
  if (!domainId) {
    alert('请输入域 ID');
    return;
  }
  searchDomain(domainId); // 调用搜索域功能
});

// 默认隐藏加入按钮
document.getElementById('join-btn').style.display = 'none';